#ifndef ESPMQTTCLIENT_H
#define ESPMQTTCLIENT_H

#ifndef CONFIG_FREERTOS_MAX_TASK_NAME_LEN
#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16
#endif
#include "ThmarMqttClient.h"
#include "mqtt_client.h" // ESP-MQTT 库

/** 基于 ESP MQTT 库实现的 MQTT 客户端(C++) */
#ifdef __cplusplus
namespace smq {

// 基于 ESP MQTT 库实现的 MQTT 客户端
class EspMqttClient : public ThmarMqttClient {
public:
    ~EspMqttClient();

    /** 仅用于单元测试，应用层实际调用 start() * */
    int connect() override;
    /** 仅用于单元测试，应用层实际调用 stop() */
    void disconnect() override;
    /** 仅用于单元测试，不建议在实际代码中使用 */ 
    int publish(const char* topic, const char* message) override;
    /** 仅用于单元测试，应用层实际调用 registerChannel()  */
    int subscribe(const char* channel) override;
    /** 仅用于单元测试，应用层实际调用 unregisterChannel() */
    int unsubscribe(const char* channel) override;

};

} // namespace smq
#endif // __cplusplus

/* EspMqttClient C接口定义 */
/* 定义EspMqttClient客户端类型的指针类型 */
typedef thmar_mqtt_client_t esp_mqtt_client_t;

/* 创建EspMqttClient客户端【待定义】 */
/*THMAR_API esp_mqtt_client_t* esp_matt_client_create();*/
/* 销毁EspMqttClient客户端 */
THMAR_API esp_mqtt_client_t* esp_matt_client_destroy(esp_mqtt_client_t* client);

/* 发布消息 */
THMAR_API int esp_matt_client_publish(esp_mqtt_client_t* client, const char* topic, const char* message);

/* 订阅主题 */
THMAR_API int esp_matt_client_subscribe(esp_mqtt_client_t* client, const char* channel);

/* 取消订阅主题 */
THMAR_API int esp_matt_client_unsubscribe(esp_mqtt_client_t* client, const char* channel);
#endif // ESPMQTTCLIENT_H